//
// Created by Martin on 2021/9/29.
//

#include "Invoker.h"
#include "Command.h"
#include "ConcreteCommand.h"
#include "Receiver.h"
#include <iostream>

using namespace std;

/**
 * 客户端测试命令模式
 * @note 在客户端，请求者根据不同的命令（对象），让响应者执行命令的命令
 * 在这个模式中，请求者Invoker只负责发送命令，通过命令（Command）对象执行（execute）请求，而无需知道响应者（Receiver）的存在；
 * 同样地，响应者也无需知道请求者，而只需针对具体的命令提供响应方法（action）
 */
int main()
{
    Command *command;
    auto *receiver = new Receiver();
    command = new ConcreteCommand(receiver);
    auto *invoker = new Invoker(command);
    invoker->call();

    delete invoker;
    delete receiver;
    delete command;
    return 0;
}